package cn.lg.soar.system.biz.modules.general.service;

import cn.lg.soar.common.util.current.CurrentProxy;
import cn.lg.soar.database.base.service.IBaseService;
import cn.lg.soar.system.biz.modules.general.entity.DictItem;
import cn.lg.soar.system.api.model.DictItemVo;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

/**
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface IDictItemService extends IBaseService<DictItem>, CurrentProxy<IDictItemService> {

    /**
     * 根据类型获取字典列表
     * @param type
     * @return
     */
    List<DictItemVo> listByCode(String typeCode);

    /**
     * 根据类型获取字典列表（多个）
     * @param codes
     * @return
     */
    default Map<String, List<DictItemVo>> mapByCode(Collection<String> codes) {
        IDictItemService proxy = proxy();
        return codes.stream().collect(Collectors.toMap(x -> x, proxy::listByCode));
    }

    /**
     * 禁用状态
     * @param ids
     * @param disabled
     */
    void updateDisabled(Set<Serializable> ids, boolean disabled);

    /**
     * 根据字典id删除
     * @param dictIds
     * @return
     */
    default boolean removeByDictIds(Collection<Long> dictIds) {
        return remove(
                Wrappers.<DictItem>lambdaQuery()
                        .in(DictItem::getDictId, dictIds)
        );
    }

    /**
     * 清空缓存
     */
    void clearCache();

}
